package com.winner.observer_pattern;

/**
 * 观察者模式（又被称为发布-订阅（Publish/Subscribe）模式  观察者模式 模板模式 策略模式 都属于行为型模式
 *
 * 它定义了一种一对多的依赖关系，让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时，会通知所有观察者对象，使它们能够自动更新自己。
 *
 * 观察者模式是一种设计模式，它允许一个对象（称为主题或可观察者）将其状态的改变通知给其他一系列依赖于它的对象（称为观察者）。
 *
 * 在 Java 中，观察者模式通常由以下几个关键组件组成：
 *
 * 主题（Subject）：也称为可观察者，它维护一系列观察者对象，并提供注册和注销观察者的方法，以及通知观察者的方法。
 * 观察者（Observer）：定义了接收主题通知的接口，通常包括一个更新方法，当主题状态改变时调用该方法。
 * 具体主题（ConcreteSubject）：实现主题接口，维护观察者列表并发送通知给观察者。
 * 具体观察者（ConcreteObserver）：实现观察者接口，当接收到主题的通知时执行相应的操作。
 *
 * ConcreteSubject 实现了 Subject 接口，并维护了一组观察者。当调用 notify 方法时，会通知所有注册的观察者。
 * ConcreteObserver 实现了 Observer 接口，当接收到通知时，会执行 update 方法来处理接收到的消息。
 *
 */
public class ObserverTest {

    public static void main(String[] args) {
        ConcreteSubject concreteSubject=new ConcreteSubject(); // 具体主题
        // 具体观察者  创建微信用户
        ConcreteObserver user1=new ConcreteObserver("杨影枫");
        ConcreteObserver user2=new ConcreteObserver("月眉儿");
        ConcreteObserver user3=new ConcreteObserver("紫轩");
        // 订阅公众号
        concreteSubject.attach(user1);
        concreteSubject.attach(user2);
        concreteSubject.attach(user3);
        //公众号更新发出消息给订阅的微信用户
        concreteSubject.notify("刘望舒的专栏更新了"); // 通知所有具体观察者
    }
}
